package eight;

import static util.Print.print;

/**
 * Created by ab on 2016/11/3.
 * 协变返回类型.
 * Java Se5与Java早期版本相比主要差异就是
 * 早期的java强制process（）的覆盖版本必须返回
 * Grain，而不能返回Wheat，尽管Wheat是Grain导出的。
 * 协变返回类型允许返回更具体的Wheat类型。
 */

//Grain 粮食
class Grain{
    public String toString(){
        return "Grain";
    }
}
//Wheat 小麦
class Wheat extends Grain{
    public String toString(){
        return  "Wheat";
    }
}
//Mill磨坊
class Mill{
    Grain process(){return new Grain();}
}

class WheatMill extends Mill{
    Wheat process(){return new Wheat();}
}

public class lesson7 {
    public static void main(String[] args){
        Mill m =new Mill();
        Grain g=m.process();
        print(g);
        m = new WheatMill();
        g=m.process();
        print(g);
    }
}
